package com.xfunc.views.floatsys;

import android.content.Context;
import android.util.Log;
import android.view.animation.BounceInterpolator;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.DrawableRes;
/**
 *
 需要权限：悬浮窗，
 共提供 4 种 MoveType :
 MoveType.slide : 可拖动，释放后自动贴边 （默认）
 MoveType.back : 可拖动，释放后自动回到原位置
 MoveType.active : 可拖动
 MoveType.inactive : 不可拖动
 setMoveStyle 方法可设置动画效果，只在 MoveType.slide 或 MoveType.back 模式下设置此项才有意义。默认减速插值器，默认动画时长为 300ms。
 ....后续操作
 //手动控制
 FloatWindow.get().show();
 FloatWindow.get().hide();
 //修改显示位置
 FloatWindow.get().updateX(100);
 FloatWindow.get().updateY(100);
 //销毁
 FloatWindow.destroy();
 ...多个悬浮窗
 FloatWindow
 .with(getApplicationContext())
 .setView(imageView)
 .build();
 FloatWindow
 .with(getApplicationContext())
 .setView(button)
 .setTag("new")
 .build();
 FloatWindow.get("new").show();
 FloatWindow.get("new").hide();
 FloatWindow.destroy("new");
 创建第一个悬浮窗不需加 tag，之后再创建就需指定唯一 tag ，以此区分，方便进行后续操作。
 */
public class FloatWindowManager {
    public static void show(Context context, @DrawableRes int resId) {
        if (FloatWindow.get() != null) {
            Log.d("xxx", "FAB 不为空 当前是否展示：${FloatWindow.get().isShowing}");
            FloatWindow.get().show();
            return;
        }
        ImageView img = new ImageView(context);
        img.setImageResource(resId);
        img.setOnClickListener(v -> Log.d("xxx", "点击悬浮按钮"));
        FloatWindow.with(context)
                .setView(img)
                .setWidth(Screen.width, 0.2f) //设置悬浮控件宽高
                .setHeight(Screen.width, 0.2f)
                .setX(Screen.width, 0.8f)
                .setY(Screen.height, 0.3f)
                //设置折叠的左右距离
                .setMoveType(MoveType.slide, 0, 0)
                //贴边动画时长为500ms，加速插值器
                .setMoveStyle(500, new BounceInterpolator())
                //指定界面显示,此方法表示 A_Activity、C_Activity 显示悬浮窗，其他界面隐藏。
//            .setFilter(true, A_Activity::class.java, C_Activity::class.java)
//            .setFilter(true, BaseActivity.class)
                //监听悬浮控件状态改变
                .setViewStateListener(new ViewStateListenerAdapter() {

                })
                //监听权限申请结果
                .setPermissionListener(new PermissionListener() {
                    @Override
                    public void onSuccess() {
                        Log.d("xxx", "onSuccess");
                    }

                    @Override
                    public void onFail() {
                        Log.d("xxx", "onFail");
                        Toast.makeText(context, "请求权限失败", Toast.LENGTH_SHORT).show();
                    }
                })
                //桌面显示
                .setDesktopShow(true)
                .build();
        FloatWindow.get().show();
    }

    public static void hide() {
        FloatWindow.get().hide();
    }
}
